package wox.lonice.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * aop方法集成
 * @author jh
 *
 */
public interface IAop {
	
	/**
     * 前置通知：目标方法执行之前执行以下方法体的内容 
     * @param jp
     */
    void beforeMethod(JoinPoint jp);

    /**
     * 返回通知：目标方法正常执行完毕时执行以下代码
     * @param jp
     * @param result
     */
    void afterReturningMethod(JoinPoint jp, Object result);

    /**
     * 后置通知：目标方法执行之后执行以下方法体的内容，不管是否发生异常。
     * 类似于try中 finally
     * @param jp
     */
    void afterMethod(JoinPoint jp);

    /**
     * 异常通知：目标方法发生异常的时候执行以下代码
     */
    void afterThorwingMethod(JoinPoint jp, NullPointerException e);

    /**
     * 环绕通知：目标方法执行前后分别执行一些代码，发生异常的时候执行另外一些代码
     * @return 
     */
    Object aroundMethod(ProceedingJoinPoint jp);

}
